package singleton;

/**
 * 懒汉模式 线程安全
 */
class LazySingleton {
    // 声明，并用volatile修饰，保证在多线程环境下的有序性
    private volatile static LazySingleton instance = null;
    // 私有构造方法
    private LazySingleton () {}
    // 对外提供一个获取实例的方法，
    public static LazySingleton getInstance() {
        // 使用双重if检查, 降低锁竞争的频率
        if (instance == null) {
            // instance没有被实例化才去加锁
            synchronized (LazySingleton.class) {
                // 获取到锁后再检查一遍，确认instance没有被实例化后去真正的实例化
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}


public class demo3 {
}
